home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 July / EnigmA AMIGA RUN 20 (1997)(G.R. Edizioni)(IT)[!][issue 1997-07 & 08][EAR-CD IV].iso / earcd / docs / mags / saku21.lha / Teksti / Eiffel.txt < prev    next >
Text File  |  1997-04-06  |  10KB  |  226 lines

  1. 2
  2. 1*
  3. {A                            Eiffel-ohjelmointikieli
  4. {A                            -----------------------
  5.  
  6. {8                                Mikko Koivunalho
  7. {8                                 mikkoi@utu.fi
  8.  
  9.   
  10. Eiffel on nuori ohjelmointikieli. Sen  ensimmäinen  malli  julkistettiin  vuonna
  11. 1985. 12 vuotta ei ole pitkä ikä, varsinkaan kun ottaa huomioon, että  kieli  on
  12. tullut laajemmin tunnetuksi vasta parina viime vuotena. Niinpä Eiffelillä  onkin
  13. ollut hyvää aikaa puhdistautua alkuvaiheen virheistä ja suunnitteluvioista. Kui-
  14. tenkin sen määrittelyä on muutettu merkittävästi vain kerran, 1991, ja  nykyinen
  15. Eiffel-malli, Eiffel 3, on sittemmin pysynyt muuttamattomana.
  16.  
  17. Eiffel-standardi on pysynyt samanlaisena, koska Eiffelin kehitys on pääosin  yk-
  18. sissä käsissä: Bertrand Meyerin ja ISE:n (Interactive Software Engineering),  ja
  19. kielen standardina pidetään Meyerin kirjaa "Eiffel, The Language". Nimensä  Eif-
  20. fel on saanut ranskalaiselta insinööriltä Alexander Gustave  Eiffeliltä  [efe'l]
  21. (1832-1923). Kielen suunnittelussa Meyer on seurannut Eiffelin omaa  ideologiaa,
  22. jonka mukaan rakenteiden itsensä (pääosin rautaa, esim.  Eiffelin  torni)  tulee
  23. olla kaunista katseltavaa symmetrisyydessään, yksinkertaisuudessaan ja täsmälli-
  24. syydessään.
  25.  
  26. Eiffel on uusi kieli, jonka suunnittelussa on tieten tahtoen hylätty suuri jouk-
  27. ko vanhemmissa kielissä käytettäviä ohjelmointimetodeja ja otettu  käyttöön  uu-
  28. sia. Paitsi että se on täysiverinen oliosuuntautunut kieli, se  on  myös  pikku-
  29. tarkka ja perinteisiin kieliin nähden syntaksiltaan yksinkertainen  sekä  ohjel-
  30. moijalta runsasta etukäteissuunnittelua vaativa.
  31.  
  32. {6                                                                     ---------->
  33. Eiffelin filosofiaa ymmärtääkseen on tarkasteltava perinteisiä kieliä ja  niiden
  34. ongelmia. Jo kauan ennen Eiffeliä ohjelmoinnin metodologian tutkijat  esittivät,
  35. että mm. GOTO-komento ei missään nimessä kuulu asialliseen ohjelmointiin,  koska
  36. se sallii ohjelman suoritusjärjestyksen täydellisen rikkomisen. Tämä ja  vastaa-
  37. vanlaiset piirteet, mm. funktion tai ohjelman keskeytys ennen loppua, on  täysin
  38. poistettu Eiffelistä.
  39.  
  40. Edelleen Eiffelin syntaksia on radikaalisti yksinkertaistettu laittamalla siihen
  41. vain kolme suorituksenohjauslauseketta: yksi ehtolauseke, yksi toistolauseke  ja
  42. yksi valintalauseke (moniehto-, C:ssä switch). Perinteisissä  kielissähän  näitä
  43. on monissa ollut kasapäin, esim. C-kielen  while-,  do-while-  ja  for-silmukat.
  44. Miksi laittaa monenlaisia toistolausekkeita sotkemaan ohjelmakoodia, kun  kerran
  45. yksi riittää kaikkiin tarpeisiin hiukan sovittamalla?
  46.  
  47. Eiffel on myös voimakkaasti tyypitetty kieli. Tavanomaisten  vanhoista  kielistä
  48. tuttujen tyyppien kuten REAL, INTEGER ja BOOLEAN lisäksi siihen on "sisäänraken-
  49. nettu" muita tyyppejä, jotka useimmista kielistä puuttuvat kokonaan  tai  ne  on
  50. toteutettu kielen itsensä ulkopuolella, esim. vektori, lineaarinen  lista,  pino
  51. ja jono. 
  52.  
  53.  
  54. {DOliokieli
  55.  
  56. Edellä kirjoitin "sisäänrakennettu" lainausmerkeissä. Ilmaisu  sallittakoon  mi-
  57. nulle, vaikka nyt selitänkin, miksi näin ei oikeastaan voi olla: Eiffel on  puh-
  58. das oliokieli, joten kaikkien sen ominaisuuksienkin tulee olla olioita.
  59.  
  60.  
  61.  
  62. {6                                                                     ---------->
  63. Tietorakenteet eli tietotyypit onkin kaikki toteutettu olioina.  Niinpä  esimer-
  64. kiksi vektoria tai listaa voi kasvattaa tai kutistaa kulloisenkin olion  sisällä
  65. vaivaamatta pääohjelmaa. Muita erikoisia tietotyyppejä ovat mm. puu-tyyppi, jol-
  66. la on aina kaksi oksaa ja yksi juuri, tai graafi, vielä  puurakennettakin  moni-
  67. puolisempi joukkotyyppi. Edellä mainittuja ja muita tyyppejä voidaan käyttää mm.
  68. erityyppisen tiedon tallennukseen ja helppoon järjestämiseen. Muita  tietoraken-
  69. teita voi luoda omaan tarpeeseen  omina  olioinaan,  jotka  sitten  voi  liittää
  70. peräkkäin vaikka vektoriin tai jonoon.
  71.  
  72. Ohjelmointia helpottaa myös automaattinen roskienkerääjä, joka vapauttaa  niiden
  73. olioiden varaaman muistin, joihin ei enää ole osoitinta. Tämä tietysti  hidastaa
  74. ohjelman suoritusta hivenen, mutta toisaalta  nopeuttaa  valtaisasti  sen  teke-
  75. mistä, koska muistivuotoja ei synny. Niiden paikkailuunhan aikaa eniten tuhraan-
  76. tuu koodattaessa ja virheitä korjattaessa.
  77.  
  78.  
  79. {DEiffelin toteutus
  80.  
  81. Nykyisissä Eiffel-ympäristöissä Eiffel-koodia ei suinkaan käännetä suoraan kone-
  82. kieleen vaan käyttäen välikielenä C:tä.
  83. Varsinainen ISE:n Eiffel on isojen koneiden kieli. Sen päätarkoitus on "program-
  84. ming in large", siis suurten ohjelmistojen ohjelmointi. Niinpä  ISE:n  oma  Eif-
  85. fel-paketti on paljon muutakin kuin vain itse kääntäjä. Se on  pääasiassa  Unix-
  86. purkeille tarkoitettu megojen kokoinen kokoelma ohjelmoijan työkaluja,  valmiita
  87. kirjastoja ja oliokokoelmia mm. graafisen ympäristön luomiseen tai  verkkosovel-
  88. lusten ohjelmointiin. ISE:n paketissa on jopa oma kieli,  LACE,  ACE-tiedostojen
  89. eli perinteisemmin "make"-tiedostojen tekemiseen (siis kääntämisen ja  linkityk-
  90. sen määrittelyihin).
  91.  
  92. {6                                                                     ---------->
  93. Sittemmin ISE on alkanut tehdä vastavanlaista  pakettia  myös  PC-yhteensopiviin
  94. (pätkitty, mutta toimiva malli on saatavilla ilmaiseksi Maailmanseitistä, osoit-
  95. teesta http://www.eiffel.com). On myös olemassa ilmainen, GNU-lisenssillä  levi-
  96. tettävä SmallEiffel-kääntäjä, jonka sorsakoodit on  valmiiksi  sovitettu  GNU  C
  97. -kääntäjiin tusinassa eri laiteympäristössä (ftp://ftp.loria.fr/pub/loria/genie-
  98. log/SmallEiffel). (Kääntyy pienellä sovituksella myös mm. SAS C:llä.)
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122. {6                                                                     ---------->
  123. {DEiffelin esimerkki-ohjelmapätkiä
  124.  
  125. Tärkein kysymys on tietenkin, millaista on Eiffelin  ohjelmakoodi.  Se,  pitääkö
  126. ohjelmoija koodin ulkonäöstä, on vakavampi näkökohta kuin useasti  tullaan  aja-
  127. telleeksikaan. Koodin, siis siistityn koodin, tulee olla ennen kaikkea helppolu-
  128. kuista, jotta se kelpaisi malliksi. Samalla sen tulisi kertoa kielen rakenteesta
  129. ja sisäisistä ratkaisuista. Ylempänä kerroin hiukan Eiffelin  koodaamistyylistä,
  130. mutta mitäpä sanat merkitsisivät ilman konkreettisia esimerkkejä: 
  131.  
  132. {C1. esimerkki: Hello_World.e
  133.  
  134. {5class HELLO_WORLD
  135. {5     -- Se tutuin ohjelma... Näin merkitään kommentit Eiffelissä!
  136. {5     -- Usein Eiffelillä ohjelmoidessa laitetaan vain yksi luokka
  137. {5     -- yhteen tiedostoon ja kerrotaan kääntäjälle, mikä on juuriluokka,
  138. {5     -- josta suoritus alkaa.
  139. {5creation make  -- Millä rutiinilla olio luodaan, jos ei spesifisesti määrätä
  140. {5               -- jotakin toista luontioperaatiota.
  141.  
  142. {5feature   -- Mitä ominaisuuksia luokalla on. Sekä rutiinit että tietoalkiot.
  143.  
  144. {5     make is
  145. {5          do
  146. {5               io.put_string("Hello World.") -- io-luokka hoitaa io-toiminnot.
  147. {5          end
  148.  
  149. {5end  -- HELLO_WORLD    Ohjelman suoritus päättyy juuriluokan luontioperaation
  150. {5     -- suorituksen päättymiseen.
  151.  
  152. {6                                                                     ---------->
  153. {C2. esimerkki: Rutiinit
  154.  
  155. Vaikkei se välttämätöntä olekaan (siis siihen ei pakoteta), esitetään  että  ru-
  156. tiineja olisi kahdenlaisia: funktioita  ja  proseduureja.  Funktiot  suorittavat
  157. jonkin (lasku)toimituksen ja antavat palautteena  sen  arvon;  proseduurit  taas
  158. eivät palauta mitään, mutta tekevät/muuttavat jotakin  tai  jonkin  muistipaikan
  159. arvoa. Ja yksi rutiini tietysti tekee mielellään  vain  yhden  asian.  Esimerkki
  160. funktion rakenteesta: 
  161.  
  162. {5nimi(argumentit): TYYPPI is   -- otsikko ja palautettavan arvon tyyppi
  163. {5require                       -- (valinnainen) ehtolauseke argumentin arvon
  164. {5                              -- sopivuuden testaamiseksi, esim. arg >= 0
  165. {5local                         -- esitellään muuttujat
  166. {5     luku: INTEGER
  167. {5do
  168. {5                              -- itse rutiini
  169. {5     Result := mikäliearvo    -- funktion palauttama arvo
  170. {5end                           -- rutiini loppuu ja arvo palautetaan kutsujalle
  171. {5                              -- vasta end-sanaan tultaessa. rutiinia ei voi
  172. {5                              -- keskeyttää.
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182. {6                                                                     ---------->
  183. {C3. esimerkki: toistolauseke
  184.  
  185. Kuten jo aikaisemmin mainittiin, Eiffelissä on perinteisiin kieliin nähden vähän
  186. rakenteita kontrollivuon ohjaukseen, mutta ne ovat monipuolisia. Alla  on  malli
  187. Eiffelin toistolausekkeesta, loop-lauseesta: 
  188.  
  189. {5from           -- from-sanan alle laitetaan toistolauseen alustukseen
  190. {5               -- tarvittava koodi, esim. muuttujien alkuarvot.
  191. {5invariant      -- (valinnainen) Ehtolauseke, jonka on oltava voimassa jokaisen
  192. {5               -- kierroksen alussa, jotta silmukka toimisi oikein (erityisen
  193. {5               -- tärkeä ensimmäisellä ja viimeisellä kierroksella)
  194. {5variant        -- (valinnainen) on päinvastainen laskutoimitus kuin se mikä
  195. {5               -- suoritetaan jokaisella kierroksella; kokonaislukuarvoinen
  196. {5               -- laskutoimitus, jonka tuloksen täytyy olla positiivinen.
  197. {5               -- Varmistaa, että suorituskertoja on äärellinen määrä.
  198. {5until          -- lopetusehto
  199. {5loop
  200. {5               -- Tähän väliin itse silmukka.
  201. {5end
  202.  
  203. Tuntuiko pitkältä ja hankalalta? Mutta tällaisten juttujen miettiminen etukäteen
  204. tekee kummasti debuggauksesta helpompaa ja nopeampaa. Luulisi, että Meyer  olisi
  205. laittanut toistolauseen loppuun vastaavan toiminnon kuin alun from-lause huoleh-
  206. timaan toiston jälkeisistä toimenpiteistä. Olisiko unohtanut vai pitänyt  turhan
  207. hankalana? 
  208.  
  209.  
  210.  
  211.  
  212. {6                                                                     ---------->
  213. {DKenelle Eiffel?
  214.  
  215. Hankala kysymys. Helpompi kai olisi vastata päinvastaiseen: Eiffel  ei  ainakaan
  216. missään nimessä ole perinteisen mallin hakkerin kieli. Eiffel-koodin  kanssa  ei
  217. voi helposti räpeltää tai oikaista. Ohjelman suunnitteluun täytyy uhrata aikaa.
  218.  
  219. Toisaalta aikaa ei kannata uhrata pienten sovellusten tekemiseen,  mutta  ammat-
  220. tiohjelmoijille Eiffel voisi olla mannaa. Apuneuvoineen se soveltuu  isojen  oh-
  221. jelmien tekemiseen.
  222.  
  223. Mikään jokapaikan jyrä Eiffel ei ole, mutta ainakin minun suosiostani se kilpai-
  224. lee tasaveroisesti C++:n kanssa (raskaassa sarjassa).
  225.  
  226.